package models;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.OneToMany;

import play.data.validation.Required;
import play.db.jpa.Model;

@Entity
public class ComidaPlan extends Model {
    
	@Enumerated(EnumType.STRING)
	@Required
	private TipoComida tipo;
	
	@OneToMany(mappedBy="comida", cascade=CascadeType.ALL)
	private List<PorcionPlan> porciones = new ArrayList<PorcionPlan>();

	public ComidaPlan() {
	}
	
    /**
     * Toma la ComidaPlan de parametro y clona una igual para devolverla 
     * */
	public ComidaPlan(ComidaPlan comidaPlanTemplate) {
		
		this.tipo = comidaPlanTemplate.tipo;
		
		for (PorcionPlan porcionPlan : comidaPlanTemplate.getPorciones()) {
			this.agregarPorcionPlan(new PorcionPlan(porcionPlan));
		}
	}

	public TipoComida getTipo() {
		return tipo;
	}

	public void setTipo(TipoComida tipo) {
		this.tipo = tipo;
	}

	public List<PorcionPlan> getPorciones() {
		return porciones;
	}

	public void agregarPorcionPlan(PorcionPlan porcion) {
		
		this.porciones.add(porcion);
		porcion.setComida(this);
	}
	
	@Override
	public boolean equals(Object object) {
		
		return (object instanceof ComidaPlan) ? this.tipo.equals(((ComidaPlan) object).getTipo()) : super.equals(object);
		// perdon por el instance of, pero play me mandaba un objeto del tipo PorcionPlan en el equals y pinchaba!!! HORRIBLE!
	}
	
}
